package shujia.day02.ketang;

/*
    数组：
        1、是一个可以存储同一种数据类型元素的容器，对于同一个数组而言，里面的元素数据类型都是一样。
        2、数组长度是固定大小的，其实一块内存中的连续空间，数组一旦创建，长度不可变
        3、数组具有索引的概念，从左向右，从0开始

    如何去定义一个数组呢？
    一维数组：
        语句定义格式：
            数据类型[] 数组名;【推荐写法】
            数据类型 数组名[];


    如何对一维数组进行初始化？
        动态初始化
            语句定义格式： 数据类型[] 数组名 = new 数据类型[m];
        静态初始化


 */
public class ArrayDemo1 {
    public static void main(String[] args) {
//        int a = 10;
        //数据类型[] 数组名;
        //定义一个存储int类型元素的数组
        // 数据类型 变量名 = 初始化值;
//        int[] arr1;
        //定义并创建一个可以存储3个int类型元素的一维数组
        /**
         *  左边：
         *      int: 表示该数组中的元素是int类型
         *      []: 表示该数组是一个一维数组
         *      arr1: 数组的名字，符合变量名的命名规则
         *  右边：
         *      new: 将来看到new，就意味着在内存中开辟空间
         *      int: 表示该数组中的元素是int类型
         *      []: 表示该数组是一个一维数组
         *      3: 表示该一维数组的大小或者长度为3
         */
        int[] arr1 = new int[3];
        System.out.println(arr1); // [I@4554617c

        /**
         * 每运行一个java程序相当于是一个进程，一个进程系统会对此独立分配内存和CPU
         *
         *  JVM将内存划分成了5个区域：
         *  栈：存放的是方法上或方法内部定义的变量，方法的调用是在栈中调用运行的
         *  堆：存放的都是一些new出来的东西
         *  方法区：存放一些静态的，常量值，class文件对象，定义的方法初始化
         *  本地方法区：和操作系统有关【咱们不学】
         *  寄存器：和CPU运行有关【咱们不学】
         */


        //java中的数组可以通过整数索引获取数组中的元素值
        //语句定义格式：数组名[整数索引]
        //arr[1]  可以是一个具体的整数值
        //arr[i]  可以是一个整数类型的变量
        //arr[i+1] 可以是一个复杂的表达式，但是结果一定要是整数

        //获取数组中的第一个元素
        int res1 = arr1[0];
        System.out.println(res1);

        // 获取数组中的第二个元素
        System.out.println(arr1[1]);

        //可以直接使用新的值覆盖原来的元素值
        arr1[1] = 100;
        System.out.println(arr1[1]);

    }
}
